/**
 * 权限管理模块
 */
const router = require('koa-router')()
const util = require('../utils/util')
const Leave = require('../models/leaveSchema')
const Dept = require('../models/deptSchema')
// const jwt = require('jsonwebtoken')
// const md5 = require('md5')

// 添加二级路由
router.prefix('/leave')

router.get('/list', async (ctx) => {
  const { applyState, type } = ctx.request.query
  const { page, skipIndex } = util.pager(ctx.request.query)
  let authorization = ctx.request.headers.authorization
  let { data } = util.decoded(authorization)
  try {
    let params = {}
    if( type == 'approve') {
      if( applyState == 1){
        params.curAuditUserName = data.userName;
        params.applyState = 1
      } else if (applyState > 1) {
        params = {"auditFlows.userId": data.userId, applyState}
      } else {
        params = {"auditFlows.userId": data.userId}
      }
    }else {
      params = {
        "applyUser.userId": data.userId
      }
    }

    
    if (applyState) params.applyState = applyState
    const query = Leave.find(params)
    const list = await query.skip(skipIndex).limit(page.pageSize)
    const total = await Leave.countDocuments(params)
    ctx.body = util.success({
      page: {
        ...page,
        total
      },
      list
    })
  } catch (error) {
    ctx.body = util.fail(`查询失败${error.stack}`)
  }
})


router.get('/count', async (ctx) => {
  console.log(ctx)
  let authorization = ctx.request.headers.authorization;
  let { data } = util.decoded(authorization);
  try {
    let params = {}
    params.curAuditUserName = data.userName;
    params.$or = [{ applyState: 1 }, { applyState: 2 }]
    const total = await Leave.countDocuments(params)
    ctx.body = util.success('1123')
  } catch (error) {
    ctx.body = util.fail(`查询异常：${error.message}`)
  }
})

router.post('/operate', async (ctx) => {
  const { _id, action, ...params } = ctx.request.body
  // 将数据进行解密
  let authorization = ctx.request.headers.authorization
  let { data } = util.decoded(authorization)
  if (action == 'create') {
    // 生成订单单号
    let orderNo = "XJ"
    // XJ20231223
    orderNo += util.formateDate(new Date(), "yyyyMMdd")
    const total = await Leave.countDocuments()
    params.orderNo = orderNo + total
    let id = data.deptId.pop()
    // 查找负责人信息
    let dept = await Dept.findById(id)
    console.log(dept)
    let userList = await Dept.find({ deptName: { $in: ['人事部门', '财务部门'] } })
    let auditUsers = dept.userName
    let auditFlows = [
      { userId: dept.userId, userName: dept.userName, userEmail: dept.userEmail }
    ]
    userList.map(item => {
      auditFlows.push({
        userId: item.userId, userName: item.userName, userEmail: item.userEmail
      })
      auditUsers += ',' + item.userName;
    })

    params.auditUsers = auditUsers
    params.curAuditUserName = dept.userName
    params.auditFlows = auditFlows
    params.auditLogs = []
    params.applyUser = {
      userId: data.userId,
      userName: data.userName,
      userEmail: data.userEmail
    }

    let res = await Leave.create(params)
    ctx.body = util.success("", "创建成功")
  }else {
    let res = await Leave.findByIdAndUpdate(_id, {applyState: 5})
    ctx.body = util.success('',"操作成功")
  }
})


// 审批
router.post("/approve", async (ctx) => {
  // 1.操作类型 2.备注 3.用户ID
  const { action, remark, _id } = ctx.request.body;
  let authorization = ctx.request.headers.authorization;
  let { data } = util.decoded(authorization);
  let params = {}
  try {
    // 1:待审批 2:审批中 3:审批拒绝 4:审批通过 5:作废
    let doc = await Leave.findById(_id)
    let auditLogs = doc.auditLogs || [];
    if (action == "refuse") {
      params.applyState = 3;
    } else {
      // 判断是否已处理过该申请单
      if (doc.auditFlows.length == doc.auditLogs.length) {
        ctx.body = util.success('当前申请单已处理，请勿重复提交')
        return;
        // 判断处理审批日志数量等于审批流程的长度+1
      } else if (doc.auditFlows.length == doc.auditLogs.length + 1) {
        params.applyState = 4;
        // 判断处理审批日志数量小于审批流程的长度
      } else if (doc.auditFlows.length > doc.auditLogs.length) {
        params.applyState = 2;
        // 获取下一个审批人
        params.curAuditUserName = doc.auditFlows[doc.auditLogs.length + 1].userName;
      }
    }
    // 定义审批日志
    auditLogs.push({
      userId: data.userId,
      userName: data.userName,
      createTime: new Date(),
      remark,
      action: action == 'refuse' ? "审核拒绝" : "审核通过"
    })
    params.auditLogs = auditLogs;
    let res = await Leave.findByIdAndUpdate(_id, params);
    ctx.body = util.success("", "处理成功");
  } catch (error) {
    ctx.body = util.fail(`查询异常：${error.message}`)
  }
})
module.exports = router
